package it.univaq.disim.mwt.business.impl;

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import it.univaq.disim.mwt.business.RitardiService;
import it.univaq.disim.mwt.business.model.Alunno;
import it.univaq.disim.mwt.business.model.Insegnante;
import it.univaq.disim.mwt.business.model.RegistroDiClasse;
import it.univaq.disim.mwt.business.model.Ritardo;

public class JDBCRitardoService implements RitardiService {

	//FUNZIONA
	@Override
	public Ritardo findRitardiById(Long id) {
		
		Connection connection = null;
		PreparedStatement preparedStatement = null;
		ResultSet resultSet = null;
		
		Ritardo ritardo = null;
		String sql = "select * from ritardi where id = ? ";
		
		try {
			
			connection = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:XE", "school", "school");
			preparedStatement = connection.prepareStatement(sql);
			preparedStatement.setLong(1, id);
			resultSet = preparedStatement.executeQuery();			
			resultSet.next();
            
			Long ide = resultSet.getLong("id");
			Long idRegistroClasse = resultSet.getLong("id_registro_classe");
			Long idAlunno = resultSet.getLong("id_alunno");
			Long idInsegnante = resultSet.getLong("id_insegnante");
            String descrizione = resultSet.getString("descrizione");
            Date data = resultSet.getDate("data");
            
            
            JDBCRegistroDiClasseService jdbcRegistroDiClasseService= new JDBCRegistroDiClasseService();
            RegistroDiClasse registroDiClasse=jdbcRegistroDiClasseService.findRegistroDiClasseByID(idRegistroClasse);
            
            JDBCAlunnoService jdbcAlunnoService=new JDBCAlunnoService();
            Alunno alunno=jdbcAlunnoService.findAlunnoById(idAlunno);
            
            JDBCInsegnanteService jdbcInsegnanteService=new JDBCInsegnanteService();            
            Insegnante insegnante=jdbcInsegnanteService.findInsegnanteById(idInsegnante);
            
			ritardo=new Ritardo(ide,registroDiClasse,alunno,insegnante,descrizione,data);
            
            resultSet.close();
			preparedStatement.close();
			connection.close();
			
			return ritardo ;
		
		} catch (SQLException e) {
			
			e.printStackTrace();
		}
		return null;
	}

	//FUNZIONA
	@Override
	public List<Ritardo> findAllRitatardi() {

		Connection connection = null;
		PreparedStatement preparedStatement = null;
		ResultSet resultSet = null;
		
		List<Ritardo> listRitardi = new ArrayList<Ritardo>();
		String sql = " select * from ritardi ";
		Ritardo ritardo = null;

		try {
			connection = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:XE", "school", "school");
			preparedStatement = connection.prepareStatement(sql);
			resultSet = preparedStatement.executeQuery();			
			
			while(resultSet.next()){
				
				Long ide = resultSet.getLong("id");
				Long idRegistroClasse = resultSet.getLong("id_registro_classe");
				Long idAlunno = resultSet.getLong("id_alunno");
				Long idInsegnante = resultSet.getLong("id_insegnante");
	            String descrizione = resultSet.getString("descrizione");
	            Date data = resultSet.getDate("data");
	            
	            
	            JDBCRegistroDiClasseService jdbcRegistroDiClasseService= new JDBCRegistroDiClasseService();
	            RegistroDiClasse registroDiClasse=jdbcRegistroDiClasseService.findRegistroDiClasseByID(idRegistroClasse);
	            
	            JDBCAlunnoService jdbcAlunnoService=new JDBCAlunnoService();
	            Alunno alunno=jdbcAlunnoService.findAlunnoById(idAlunno);
	            
	            JDBCInsegnanteService jdbcInsegnanteService=new JDBCInsegnanteService();            
	            Insegnante insegnante=jdbcInsegnanteService.findInsegnanteById(idInsegnante);
	            
				ritardo=new Ritardo(ide,registroDiClasse,alunno,insegnante,descrizione,data);
	           
	            
	            listRitardi.add(ritardo);
			}
			
			resultSet.close();
			preparedStatement.close();
			connection.close();
		
			return listRitardi;
			
		} catch (SQLException e) {
			
			e.printStackTrace();
		}

		return null;	
		
	}
	
}